/**
 * 用户身份管理工具
 * 统一处理用户ID获取和身份验证逻辑
 */

/**
 * 获取当前用户ID
 * 优先级：userInfo.id > 单独存储的userId > 默认测试值
 * @returns {number|null} 用户ID
 */
export function getCurrentUserId() {
  // 1. 优先从用户信息中获取（真实登录用户）
  const userInfo = uni.getStorageSync('userInfo')
  if (userInfo && userInfo.id) {
    console.log('👤 从 userInfo 获取用户ID:', userInfo.id)
    return userInfo.id
  }
  
  // 2. 从单独存储的userId获取（开发测试时手动设置的ID）
  const userId = uni.getStorageSync('userId')
  if (userId) {
    console.log('👤 从本地存储获取用户ID:', userId)
    return userId
  }
  
  // 3. 开发环境下的默认测试用户ID（避免返回null导致API调用失败）
  const defaultTestUserId = 16
  console.log('🔧 使用默认测试用户ID:', defaultTestUserId)
  
  // 自动设置默认测试ID到本地存储，方便下次使用
  uni.setStorageSync('userId', defaultTestUserId)
  
  return defaultTestUserId
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export function isUserLoggedIn() {
  const userInfo = uni.getStorageSync('userInfo')
  const accessToken = uni.getStorageSync('accessToken')
  
  return !!(userInfo && accessToken)
}

/**
 * 获取当前用户信息
 * @returns {Object|null} 用户信息对象
 */
export function getCurrentUserInfo() {
  return uni.getStorageSync('userInfo')
}

/**
 * 设置用户ID（用于测试或特殊情况）
 * @param {number} userId 用户ID
 */
export function setTestUserId(userId) {
  if (userId) {
    uni.setStorageSync('userId', userId)
    console.log('🔧 已设置测试用户ID:', userId)
  }
}

/**
 * 生成随机测试用户ID并设置
 * @param {number} min 最小值 
 * @param {number} max 最大值
 * @returns {number} 生成的用户ID
 */
export function generateTestUserId(min = 1000, max = 9999) {
  const testUserId = Math.floor(Math.random() * (max - min + 1)) + min
  setTestUserId(testUserId)
  uni.showToast({
    title: `测试用户ID: ${testUserId}`,
    icon: 'none',
    duration: 2000
  })
  return testUserId
}

/**
 * 开发者工具：快速切换测试用户
 */
export function switchTestUser() {
  uni.showModal({
    title: '开发者工具',
    content: '是否生成新的测试用户ID？',
    confirmText: '生成',
    cancelText: '取消',
    success: (res) => {
      if (res.confirm) {
        generateTestUserId()
      }
    }
  })
}

/**
 * 清除用户相关信息
 */
export function clearUserInfo() {
  uni.removeStorageSync('userInfo')
  uni.removeStorageSync('userId')
  uni.removeStorageSync('accessToken')
  uni.removeStorageSync('refreshToken')
}

/**
 * 验证用户权限（针对需要登录的操作）
 * @param {boolean} showTip 是否显示提示信息
 * @returns {boolean} 是否有权限
 */
export function validateUserAuth(showTip = true) {
  const isLoggedIn = isUserLoggedIn()
  
  if (!isLoggedIn && showTip) {
    uni.showModal({
      title: '需要登录',
      content: '此操作需要登录，是否前往登录页面？',
      confirmText: '去登录',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          uni.navigateTo({
            url: '/pages/auth/login'
          })
        }
      }
    })
  }
  
  return isLoggedIn
}

export default {
  getCurrentUserId,
  isUserLoggedIn,
  getCurrentUserInfo,
  setTestUserId,
  generateTestUserId,
  switchTestUser,
  clearUserInfo,
  validateUserAuth
}